0717-7821348

暗码重置

本来能够经过

WebElement element = driver.findElement(By.linkText("暗码重置"));

来定位此元素,可是由于该元素在iframe id="left_frame"这个frame里面 所以需求先经过定位frame然后再定位frame里面的某一个元素的办法定位此元素

WebElement element =driver.switchTo().frame("left_frame").findElement(By.linkText("暗码重置"));

3.不在同一个frame里面查找元素

我们可能会遇到页面左面一栏归于left_frame,右侧归于right_frame的状况,此刻假如当时处在

left_frame,就无法经过id定位到right_frame的元素。此刻需求经过以下句子切换到默许的content

driver.switchTo().defaultContent();

例如当时地点的frame为left_frame

WebElement xiaoshoumingxi_element = driver.switchTo().frame("left_frame").findElement(By.linkText("出售明细"));

xiaoshoumingxi_element.click();

需求切换到right_frame

driver.switchTo().defaultContent();

Select quanzhong_select2 = new Select(driver.switchTo().frame("right_frame").findElement(By.id("coupon_type_str")));

quanzhong_select2.selectByVisibleText("售后0小时");

4. xpath描绘过错

这个是由于在描绘途径的时分没有依照xpath的规矩来写形成找不到元素的状况呈现

由于Xpath层级太杂乱,简单犯错。可是该定位办法能够有用定位绝大部分的元素,主张把握。

解决方案:

①能够运用Firefox的firePath,仿制xpath途径。该办法简单由于层级改动而需求从头编写过xpath途径,不主张运用,初学者能够先仿制途径,然后测验去修正它。

②提高低写xpath的水平。

怎么查验编写的Xpath是否正确?编写好Xpath途径,能够直接仿制到搜狐浏览器的firebug检查html源码,经过Xpath搜索:如下赤色框,若无报错,则阐明编写的Xpath途径没错。

find_element_by_xpath("//input[@id='kw']")

5.点击速度过快 页面没有加载出来就需求点击页面上的元素

这个需求添加必定等候时刻,显现等候时刻能够经过WebDriverWait 和util来完成

例如:

//用WebDriverWait和until完成显现等候 等候欢迎页的图片呈现再进行其他操作

WebDriverWait wait = (new WebDriverWait(driver,10));

wait.until(new ExpectedCondition(){

public BooleaPython+Selenium定位不到元素:6种常见原因及解决办法n apply(WebDriver d){

boolean loadcomplete = d.switchTo().frame("right_frame").findElement(By.xpath("//center/div[@class='welco']/img")).isDisplayed();

return loadcomplete;

}

});

也能够自己预估时刻经过Thread.sleep(5000);//等候5秒 这个是强制线程歇息

6.firefox安全性强,不允许跨域调用Python+Selenium定位不到元素:6种常见原因及解决办法呈现报错

过错描绘:uncaught exception: [Exception... "Component returned failure code: 0x80导游证004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location:

解决办法:

这是由于firefox安全性强,不允许跨域调用。

Firefox 要撤销XMLHttpRequest的跨域约束的话,

第一是从 about:config 里设置 signed.applets.codebase_principal_support = true; (地址栏输入about:config 即可进行firefox设置)

第二就是在open的代码函数前参加相似如下的代码: try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { alert("Permission UniversalBrowserRead denied."); }

总结:

只所以说WebUI元素定位是中心,是由于操作元素前有必要先要定位到元素;只所以说元素定位又是难点地点,是由于selenium尽管供给了定位元素的办法,但有些场景直接套用办法会报错,如元素是内嵌到frame,Python+Selenium定位不到元素:6种常见原因及解决办法存在多个相同元素,弹框、加载延时等,此刻需求对元素进行剖析,然后采纳应对办法,这也是WebUI自动化的经历堆集地点。

请重视+私信回复:“学习”Python+Selenium定位不到元素:6种常见原因及解决办法就能够免费拿到软件测验学习材料

58536585439//p3.pstatp.com/large/18a2001839e3f08e87b2[{"name":"Python"},{"name":"HTML"},{"name":"XML"}]1571133463
关于我们

专业团队

您现在的位置: 首页 > 关于我们 > 专业团队

Python+Selenium定位不到元素:6种常见原因及解决办法
2019-11-29 22:09:55

页面元素定位是自动化中最重要的工作, selenium Webdriver 供给了很多种元素定位的办法。 测验人员应该熟练把握各种定位办法,运用最简略,最安稳的定位办法。

在自动化测验过程中, 测验程序一般的操作页面元素过程:

1. 找到Web的页面元素,并赋予到一个存储目标中 (WebElement);

2. 对存储页面元素的目标进行操作, 例如:点击链接,在输入框中输入字符等;

3. 验证页面上的元素是否契合预期。

经过这三个过程, 咱们能够完结一个页面元素的操作, 找到页面元素是很重要的一个过程。 找不到页面元素,后边就无法做了。

所以,今日我来共享selenium定位不到元素的6种原因及解决办法,期望能够协助一些遇到问题的朋友们。

1.动态id定位不到元素

for example:

//WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));

WebElement xiexin_element = driver.findElement(By.xpath("//span[contains(.,'写 信')]"));

xiexin_element.click();

上面一段代码注释掉的部分为经过id定位element的,可是此id“_mail_component_82_82”后边的数字会跟着你每次登陆而改动,此刻就无法经过id精确定位到element。

所以引荐运用xpath的相对途径办法查找到该元素。

2.iframe原因定位不到元素

由于需求定位的元素在某一个frame里面,所以有时经过独自的id/name/xpath仍是定位不到此元素

比方以下一段xml源文件: