五、Web控件定位与操作

Selenium的点击与输入

  • 定义
    • driver.find_element(By.ID, 'kw').send_keys('Selenium')
    • driver.find_element(By.ID, 'su').click()

XPATH定义

  • XML Path Language
  • 用于解析html与xml
  • 缺点:速度比较慢,从头到尾遍历
  • 优点:在selenium和appium中都能使用


    image.png

    image.png

XPATH实战-对百度网页中的元素进行定位

  1. F12 键调出控制台

  2. 选择Console

    image.png

  3. Console中的命令:

  • clear() 清空
  • $x("ele") 用xpath进行定位
  1. 点击Elements,选择左右上小箭头对目的元素进行定位
    image.png
  • id 元素一般是唯一的
  1. 在Console 中进行定位
  • 输入$x("//*[@id='s_tab']") 定位到div
    image.png
  • 输入$x("//*[@id='s_tab']//b")定位到div下面的b标签
  • 输入$x("//*[@id='s_tab']//a")定位到div下面的a标签,共有9个
    image.png
  • 输入$x("//*[@id='s_tab']//a[1]")定位到div下面的第一个a标签
    image.png
  • 输入$x("//*[@id='s_tab']//a[last()]")定位到div下面的最后一个a标签
  • 输入$x("//*[@id='s_tab']//a[last()-1]")定位到div下面的倒数第二个a标签
  1. 定位百度的输入框


    image.png
  • Console 中输入$x("//*[@name='wd']")$x("//*[@id='kw']"),均能定位到输入框
    image.png
  1. 定位百度右上角的百度首页
    image.png
  • 输入$x("//*[@id='u']//a[1]")
    image.png

///的区别为:前者为父元素下的所有层级元素,即包含儿子、孙子、从孙子等;而后者只能定位父元素的子元素(下一层元素),即只能为儿子。

CSS Selector

  • 可以用于appium 和 selenium,但是appium原生的控件不支持CSS Selector,只支持XPath。手机只有出现webview时才能使用CSS Selector,因为CSS Selector 只能定位网页上的CSS样式

常用的CSS Selector

image.png

image.png

CSS Selector实战

  • Console 输入 $("ele"),表示使用CSS Selector 定位
  1. 输入$('#kw')或者$('id=kw'),定位到 id=‘kw’ 的输入框
image.png

image.png
  1. 输入$('#s_tab b'),定位到网页这个元素,空格代表其子孙元素
    image.png
  2. 查找第一个a标签,输入#s_tab a:nth-child(1)发现返回结果为0
$('#s_tab a:nth-child(1)')
init [prevObject: init(1), context: document, selector: "#s_tab a:nth-child(1)"]
context: document
length: 0
prevObject: init [document, context: document]
selector: "#s_tab a:nth-child(1)"
__proto__: Object(0)
  • 所以#s_tab a:nth-child(1) 实际找的是a标签的父元素下的第一个子标签
    image.png
  • 因此要找第一个a标签,应该第二个儿子,应该输入#s_tab a:nth-child(2)
    image.png
  1. 查找最后一个a标签,输入$('#s_tab a:nth-last-child(1)')
    image.png

By有些方法的本质其实是CSS_Selector

        if self.w3c:
            if by == By.ID:
                by = By.CSS_SELECTOR
                value = '[id="%s"]' % value
            elif by == By.TAG_NAME:
                by = By.CSS_SELECTOR
            elif by == By.CLASS_NAME:
                by = By.CSS_SELECTOR
                value = ".%s" % value
            elif by == By.NAME:
                by = By.CSS_SELECTOR
                value = '[name="%s"]' % value
        return self.execute(Command.FIND_ELEMENT, {
            'using': by,
            'value': value})['value']

实战代码

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestWait:

    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('https://www.baidu.com')
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_wait(self):
        # 使用By.XPATH 或 By.ID 或 By.CSS_SELECTOR
        # self.driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('selenium')
        # self.driver.find_element(By.ID, 'kw').send_keys('selenium')
        # 在输入框输入selenium
        self.driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('selenium')
        # 点击百度一下进行搜索
        self.driver.find_element(By.ID, 'su').click()
        sleep(3)

下一节:Web控件交互,包括右键点击、页面滑动、表单填写等自动化动作

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容