首页 » PHP教程 » phpcss不显示技巧_PythonSelenium定位不到元素6种常见原因及解决办法

phpcss不显示技巧_PythonSelenium定位不到元素6种常见原因及解决办法

访客 2024-12-19 0

扫一扫用手机浏览

文章目录 [+]

在自动化测试过程中, 测试程序常日的操作页面元素步骤:

1. 找到Web的页面元素,并授予到一个存储工具中 (WebElement);

phpcss不显示技巧_PythonSelenium定位不到元素6种常见原因及解决办法

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

phpcss不显示技巧_PythonSelenium定位不到元素6种常见原因及解决办法
(图片来自网络侵删)

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源文件:

<iframe id=\"大众left_frame\"大众 scrolling=\公众auto\"大众 frameborder=\"大众0\公众 src=\公众index.php?m=Index&a=Menu\"大众 name=\"大众left_frame\"大众 noresize=\"大众noresize\"大众 style=\"大众height: 100%;visibility: inherit; width: 100%;z-index: 1\"大众>

<!DOCTYPE html PUBLIC \"大众-//W3C//DTD HTML 4.01 Transitional//EN\公众 \公众http://www.w3.org/TR/html4/loose.dtd\公众>

<html>

<head>

<body class=\"大众menuBg\"大众>

<div id=\公众menu_node_type_0\"大众>

<table width=\"大众193\"大众 cellspacing=\公众0\"大众 cellpadding=\公众0\"大众 border=\"大众0\"大众>

<tbody>

<tr>

<tr>

<td id=\"大众c_1\公众>

<table class=\"大众menuSub\"大众 cellspacing=\"大众0\公众 cellpadding=\公众0\公众 border=\"大众0\公众 align=\"大众center\"大众>

<tbody>

<tr class=\公众sub_menu\"大众>

<td>

<a href=\公众index.php?m=Coupon&a=SearchCouponInfo\公众 target=\"大众right_frame\公众>密码重置</a>

</td>

</tr>

原来可以通过

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<Boolean>(){

public Boolean apply(WebDriver d){

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

return loadcomplete;

}

});

也可以自己预估韶光通过Thread.sleep(5000);//等待5秒 这个是逼迫线程安歇

6.firefox安全性强,不许可跨域调用涌现报错

缺点描述:uncaught exception: [Exception... \"大众Component returned failure code: 0x80004005 (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,存在多个相同元素,弹框、加载延时等,此时须要对元素进行剖析,然后采纳应对方法,这也是WebUI自动化的履历积累所在。

请关注+私信回答:“学习”就可以免费拿到软件测试学习资料

标签:

相关文章