大家好,又见面了,我是你们的朋友全栈君。
是一个开源的web自动化测试的框架,支持多种编程语言,支持跨浏览器平台进行测试
Selenium主要有三种验证点
Selenium是一个Web UI自动化工具。它不提供任何API来建立数据库连接。这取决于你使用Selenium进行自动化的编程语言。
可以使用下面的Selenium命令来检查: assertTrue(selenium.isElementPresent(locator));
没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断
不可以,想点击的话,可以用js去掉dispalay=none的属性
保证操作元素的成功率,也就是说如何保证我点击的元素一定是可以点击的?
Selenium有八种定位方式:
如果存在id,我一定使用Id,因为简单方便,定位最快。 其次是Xpath,因为很多情况下html标签的属性不够规范,无法唯一定位。Xpath是通过相对位置定位 如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。
首先触发动态事件,然后再定位。如果是动态菜单,则需要层级定位。——JS实现(对动态事件封装)
先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变) 属性动态变化也就是指该元素没有固定的属性值,可以通过: JS实现, 通过相对位置来定位,比如xpath的轴,paren/following-sibling/percent-sibling
不会的。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面。其次再通过函数查找该元素。
它可以通过下面的代码行来实现。 只需一点时间(以秒为单位)来检查元素,如下所示:
public void waitForElementPresent(String element, int timeout) throws Exception {
for (int second = 0;; second++) {
if (second >= timeout)
fail(“Timeout. Unable to find the Specified element” + element);
try {
if (selenium.isElementPresent(element))
break;
} catch (Exception e) {
}
Thread.sleep(1000);
}}
1.select类里面提供的方法:select_by_value(“xxx”) 2.xpath的语法也可以定位到
应该首先移动菜单标题,然后移至弹出菜单项并单击它。不要忘记在最后调用actions.perform() 。
重置元素属性,给定位的元素加背景、边框
如果XPath是从文档节点开始,它将允许创建“绝对”路径表达式。 例如 “/ html / body / p”匹配所有的段落元素。
如果XPath在文档中的任意位置开始进行选择匹配,那么它将允许创建“相对”路径表达式。 例如 “// p”匹配所有的段落元素。
XPath是一种在HTML / XML文档中定位的方法,可用于识别网页中的元素。
如果没有与页面上的元素相关联的名称/ ID,或者名称/ ID的一部分是常量,则必须使用XPath。
绝对路径用 - / 单斜杠
相对路径用 - // 双斜杠
ID,类,名称也可以用于XPath :
//input[@name=’q’]
//input[@id=’lst-ib’]
//input[@class=’ lst’]
如果id / name / class的一部分是常量 :
//input[contains(@id,’lst-ib’)
CSS位置策略可以与Selenium一起使用来定位元素,它使用CSS定位方法
绝对路径用 - (空格符号)
相对路径用 - >表示
ID,类,名称也可以用于XPath:
css=input[name=’q’]
css=input[id=’lst-ib’] or input#lst-ib
css=input[class=’lst’] or input.lst
如果id / name / class只有一部分是常量:
css=input[id*=’lst-ib’)]
使用内部文本的元素位置策略:
css = a:contains(‘log out’)
不可以,webdriver是专门做web的UI自动化参数
在selenium启动以后,driver充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client.
WebDrive协议本身是http协议,数据传输使用json 启动浏览器的时候用到的是http协议
AJAX代表异步JavaScript和XML。它不依赖于创建有效的XML所需的打开和关闭标签的额外开销。大部分时间WebDriver自动处理Ajax控件和调用。如果不能处理的话,可以按照下面的方式来处理。
Waiting for Ajax Control
WebElement AjaxElement = (new WebDriverWait(driver,
10)).until(ExpectedConditions.presenceOfElementLocated(By.("")));
可以使用命令getWindowHandles()来处理多个弹出窗口。 然后将所有窗口名称存储到Set变量中并将其转换为数组。 接下来,通过使用数组索引,导航到特定的窗口。 driver.switchTo().window(ArrayIndex);
假如一个文本框是一个Ajax控件,当我们输入一些文本时,它会显示自动建议的值。 处理这样的控件,需要在文本框中输入值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。
隐式等待是设置的全局等待,分为
如果是页面元素超时,设置等待时间,是对页面中的所有元素设置加载时间。
隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常情况下,可以使用一些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。
打开浏览器后添加下面的命令
driver.navigate().to(“javascript:document.getElementById(‘overridelink’).click()”);
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151416.html原文链接:https://javaforall.cn