我的要求是
从网格获取所有数据
搜索特定文本(如果找到)
点击复选框
我的代码是,
List<WebElement> totalRows = driver.findElements(By.xpath("//*[@id='ContentPlaceHolder1_ContentPlaceHolderChild_grdGroupSelection']/tbody/tr"));
System.out.println("Total Size: "+totalRows.size());
for (int count=1;count<totalRows.size()-1;count++){
System.out.println("Loop count: "+count);
WebElement rowElement = totalRows.get(count);
System.out.println("WebElement Tag name: "+rowElement.getTagName());
}
无法从rowElement获取值。
这里发布了Logs,HTML source&amp;快照供参考。请帮帮我。提前谢谢。
线程中的异常&#34; main&#34; org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 命令持续时间或超时:294毫秒 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/stale_element_reference.html 构建信息:版本:&#39; 2.43.1&#39;,修订版:&#39; 5163bce&#39;,时间:&#39; 2014-09-10 16:27:33&#39; 系统信息:主持人:&#39; Saravanan-PC&#39;,ip:&#39; 192.168.101.22&#39;,os.name:&#39; Windows 7&#39;,os.arch:&# 39; amd64&#39;,os.version:&#39; 6.1&#39;,java.version:&#39; 1.7.0_51&#39; 会议ID:6ea5596b-9f0f-477b-9a11-dc534a0197ee 驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform = WINDOWS,databaseEnabled = true,cssSelectorsEnabled = true,javascriptEnabled = true,acceptSslCerts = true,handlesAlerts = true,browserName = firefox,webStorageEnabled = true,nativeEvents = false,rotating = false,locationContextEnabled = true,applicationCacheEnabled = true ,takeScreenshot = true,version = 35.0.1}] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) 在org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204) 在org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156) 在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599) 在org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268) 在org.openqa.selenium.remote.RemoteWebElement.findElements(RemoteWebElement.java:187) at org.openqa.selenium.remote.RemoteWebElement.findElementsByTagName(RemoteWebElement.java:264) 在org.openqa.selenium.By $ ByTagName.findElements(By.java:323) 在org.openqa.selenium.remote.RemoteWebElement.findElements(RemoteWebElement.java:163) 在com.aetherpal.scripts.ClientPolicyProfiles.selectCreatedCSPGroupID(ClientPolicyProfiles.java:95) 在com.aetherpal.scripts.ClientPolicyProfiles.main(ClientPolicyProfiles.java:80) 引起:org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/stale_element_reference.html 构建信息:版本:&#39; 2.43.1&#39;,修订版:&#39; 5163bce&#39;,时间:&#39; 2014-09-10 16:27:33&#39; 系统信息:主持人:&#39; Saravanan-PC&#39;,ip:&#39; 192.168.101.22&#39;,os.name:&#39; Windows 7&#39;,os.arch:&# 39; amd64&#39;,os.version:&#39; 6.1&#39;,java.version:&#39; 1.7.0_51&#39; 驱动程序信息:driver.version:未知 at .fxdriver.cache.getElementAt(resource://fxdriver/modules/web-element-cache.js:8325:24) at .Utils.getElementAt(file:/// C:/Users/SARAVA~1/AppData/Local/Temp/anonymous631926879527649788webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:7922:10) 在.FirefoxDriver.prototype.findElementsInternal_(file:/// C:/Users/SARAVA~1/AppData/Local/Temp/anonymous631926879527649788webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:9636: 32) 在.FirefoxDriver.prototype.findChildElements(file:/// C:/Users/SARAVA~1/AppData/Local/Temp/anonymous631926879527649788webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:9657: 3) at .DelayedCommand.prototype.executeInternal_ / h(file:/// C:/Users/SARAVA~1/AppData/Local/Temp/anonymous631926879527649788webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js: 11612:16) at .DelayedCommand.prototype.executeInternal_(file:/// C:/Users/SARAVA~1/AppData/Local/Temp/anonymous631926879527649788webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:11617: 7) at .DelayedCommand.prototype.execute /&lt;(file:/// C:/Users/SARAVA~1/AppData/Local/Temp/anonymous631926879527649788webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js :11559:5)
网格:
HTML来源:
答案 0 :(得分:1)
复选框,ID和GroupName将位于tr
。
复选框是input
中唯一的tr
元素。您可以使用以下代码来等待特定GroupName的复选框(在您的情况下为ACL all
),并在可见时立即单击它。
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(20));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//table[@id='ContentPlaceHolder1_ContentPlaceHolderChild_grdGroupSelection']//td[text()='ACL all']/..//input")));
element.Click();
答案 1 :(得分:0)
网页可能因各种原因而不断变化,即重新加载/等不明显的网页 方法1: 这个陈旧元素异常的一种方法是尝试减少“查找元素”和“对元素执行某些操作”之间的时间
方法2:
有一个重复的while循环来检查元素的可用性,直到某些条件为真,同时确保使用Implicit / Explicit / Fluent等,它有很多帮助,但从不做一个thread.sleep。
答案 2 :(得分:0)
最后我尝试了使用JavascriptExecutor.executeScript()方法。它的工作正常......我不知道这种方法是否正确。
我的示例代码是,
JavascriptExecutor scriptExecute = (JavascriptExecutor)driver;
WebElement el = (WebElement) scriptExecute.executeScript("var noOfRows =document.querySelectorAll('table[id=ContentPlaceHolder1_ContentPlaceHolderChild_grdGroupSelection]>tbody>tr'); " +
"for(var i=1;i<noOfRows.length-1;i++){" +
"return noOfRows[i]; }");
el.click();