5.5.7 XPath(xPathToFind)
如果以上查找方法都无法定位到指定对象,那么可以按XPath进行查找。例如,百度首页有文本框,如图5-35所示。
图5-35 百度搜索文本框
其HTML代码如下:
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off"> |
如要操作该文本框,则可以通过其XPath表达式“//input[@id='kw']”作为查找条件获取该对象,找到该文本框,然后再输入文本,例如程序清单5-27和程序清单5-28所示的代码。
程序清单5-27 C#代码
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://www.baidu.com); IWebElement baiduTextBox = driver.FindElement(By.XPath("//input[@id='kw']")); baiduTextBox.SendKeys("找到文本框"); |
程序清单5-28 Java代码
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to(http://www.baidu.com); WebElement baiduTextBox = driver.findElement(By.xpath("//input[@id='kw']")); baiduTextBox.sendKeys("找到文本框"); |
5.6 操作页面元素WebElement
在Selenium 1中,直接通过Selenium的各种方法来操作页面元素,但在Selenium 2中则不同,需要通过上5.5讲到的By对象先定位到对应的页面元素,然后调用这个页面元素的相关方法来进行操作。
可以通过WebDriver的FindElement()方法获得WebElement的对象实例。
在获取页面元素后,就可以对该页面元素进行各种操作了。
5.6.1 Click()
Click()方法用于执行单击元素的操作。例如,百度首页上有“登录”超级链接,如图5-36所示。
图5-36 登录按钮
要单击“登录”超级链接,代码如程序清单5-29或程序清单5-30所示/
程序清单5-29 C#代码
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://www.baidu.com); IWebElement baiduLogin = driver.FindElement(By.LinkText("登录")); baiduLogin.Click(); |
程序清单5-30 Java代码
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to(http://www.baidu.com); WebElement baiduLogin = driver.findElement(By.LinkText("登录")); baiduLogin.click(); |
在执行“WebElement baiduLogin = driver.findElement(By.LinkText("登录"));”时,程序先通过“driver.findElement(By.LinkText("登录"));”找到该按钮,然后将其赋值给变量baiduLogin。baiduLogin就是获取到的页面元素,它代表“登录”按钮,获取到它之后就可以对它进行各种操作了,例如单击操作baiduLogin.click()。
注意,在Selenium 2中没有Check/UnCheck这类方法来勾选或取消复选框和单选框,所以只能通过Click方法来进行勾选或取消勾选。例如,百度贴吧的页面上有“记住我的登录状态”复选框如图5-37所示。
只能使用Click()方法对其进行勾选,如程序清单5-31和程序清单5-32所示。
程序清单5-31 C#代码
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://tieba.baidu.com/index.html); IWebElement rememberMe = driver.FindElement(By.Id("pass_loginLite_input_isMem0")); rememberMe.Click(); |
程序清单5-32 Java代码
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to(http://tieba.baidu.com/index.html); WebElement rememberMe = driver.findElement(By.id("pass_loginLite_input_isMem0")); rememberMe.click(); |
对于Selenium 2来说,因为页面元素没有Select方法,所以也只能用Click模拟实现对下拉列表框的选择。以百度贴吧搜索为例,如图5-38所示,假设要在排序方式下拉列表框中选择“按相关性进行排序”。
其HTML代码如图5-39所示。
可以编写代码即可选择“按相关性进行排序”,如程序清单5-33和程序清单5-34所示。
图5-38 搜索排序下拉列表框
图5-39 下拉列表框的HTML代码
5.6.3 Clear()
Clear()方法用于清空input元素的值。例如,百度首页有搜索文本框,如图5-42所示。
图5-42 百度首页搜索文本框
可以先给文本框填入内容,然后使用Clear()将其清除,清除前先使用Thread.Sleep(3000)等待3秒,以便于观察),代码如程序清单5-37和程序清单5-38所示。
程序清单5-37 C#代码
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://www.baidu.com); IWebElement baiduTextBox = driver.FindElement(By.XPath("//input[@id='kw']")); baiduTextBox.SendKeys("找到文本框"); System.Threading.Thread.Sleep(3000); baiduTextBox.Clear(); |
程序清单5-38 Java代码
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to("http://www.baidu.com"); WebElement baiduTextBox = driver.findElement(By.id("kw")); baiduTextBox.sendKeys("找到文本框"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } baiduTextBox.clear(); |
5.6.4 Submit()
Submit()方法用于对指定元素所在的form元素进行提交操作。
例如,百度贴吧的登录界面如图5-43所示。
图5-43 百度贴吧登录界面
用Firebug查看它的HTML,如图5-44所示。
图5-44 百度贴吧登录HTML代码
可以看到,它由一个form组成,只要对这个from中的任何元素使用Submit()方法,都会提交这个form。
本文选自《Selenium自动化测试指南》第五章节,本站经人民邮电出版社和作者的授权,近期将进行部分章节的连载,敬请期待!
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
最新内容请见作者的GitHub页:http://qaseven.github.io/