java - 如何使用 Selenium 和 java 单击 WebTable 任何页面上的 WebElement
问题描述
大家好,我正在尝试单击 Webtable 的每个页面上存在的 WebElement(CheckBox)(即 WebTable 的分页),但我想单击通过 Xpath 传递的那个 Perticular Checkbox。
以下是我尝试过的代码
HTML:
<form id="vContactsForm" action="https://www.freecrm.com/system/index.cfm" method="post">
<table class="datacard" width="100%" cellspacing="3" cellpadding="2" border="0">
<tbody><tr><td class="datacardtitle" colspan="8" valign="top" align="left">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody><tr><td class="datacardtitle" valign="top" align="left">
Contacts
</td>
<td class="datacardtitle" valign="top" align="right">
<input class="button" value="Export" onclick="exportResultSet('query_slct_contacts_full');" type="button"> |
<input class="button" value="Shortlist All Results" onclick="flagResultSet('query_slct_contacts_full', 'CONTACT', this);" type="button"> |
<input class="button" value="New Contact" onclick="go('https://www.freecrm.com/system/index.cfm?action=contact&sub=load&client_id=&edit=1');" type="button">
</td></tr></tbody></table>
</td></tr>
<tr><td colspan="7" valign="top" align="left">
<div class="pagination">Pages : <strong>1</strong> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=21&action=contact&sub=start&fl=&">2</a> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=41&action=contact&sub=start&fl=&">3</a> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=61&action=contact&sub=start&fl=&">4</a> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=81&action=contact&sub=start&fl=&">5</a> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=101&action=contact&sub=start&fl=&">6</a> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=121&action=contact&sub=start&fl=&">7</a> | <a
href="https://www.freecrm.com/system/index.cfm?
sr=141&action=contact&sub=start&fl=&">8</a> | </div>
</td>
<td valign="top" align="right">
Java Code:
public class ClickOnAnyPageLink {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"//All_Drivers//chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://freecrm.com");
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.findElement(By.name("username")).sendKeys("*****");
driver.findElement(By.name("password")).sendKeys("*****");
driver.findElement(By.xpath("//input[@type='submit' and @value='Login']")).click();
driver.switchTo().frame("mainpanel");
driver.findElement(By.xpath("//a[contains(text(),'Contacts')]")).click();
Thread.sleep(5000);
List<WebElement> all_pages = driver.findElements(By.xpath("//form[@id='vContactsForm']/descendant::div[1]/a"));
System.out.println(all_pages.size());//7
Iterator<WebElement> pageiterator = all_pages.iterator();
while(pageiterator.hasNext())
{
WebElement elem = pageiterator.next();
elem.click();// on second page
Thread.sleep(3000);
WebElement elem1 = driver.findElement(By.xpath("//a[contains(text(),'nnn jhjhjk')]/parent::*/preceding-sibling::*/child::*"));
if(elem1.isDisplayed())
{
elem1.click();
break;
}
}
driver.close();
}
}
但我在这里面临的问题是Element not found Exception
。因为 Page 只被单击一次,它不会对 WebTable 的每个页面进行迭代并检查该 Perticular Checkbox 的存在。
此 xpath 发生异常: //a[contains(text(),'nnn jhjhjk')]/parent::*/preceding-sibling::*/child::*
我不明白我在这里缺少什么,希望我很清楚。任何帮助将不胜感激。谢谢
解决方案
您能否尝试将 if 循环更改为以下内容,并让我知道它是否适合您 -
List<WebElement> elem1 = driver.findElements(By.xpath("//a[contains(text(),'nnn jhjhjk')]/parent::*/preceding-sibling::*/child::*"));
if(elem1.size()>0)
{
elem1.click();
break;
}
这是假设你只得到一个元素。请让我知道它是否有效。
推荐阅读
- apache-pulsar - Pulsar 上的同一个主题是否可以有多个生产者?
- linux - 回显从 GREP 中找到的所有文件
- python - Django Allauth:如何自定义确认电子邮件主题?
- java - 我怎样才能更好地实现我的键绑定和摆动计时器?
- c++ - 我的游戏引擎的 Entity-Component-System 中的 GetComponent<>() 函数返回编译器错误 C2440
- apache-spark - 通过 Databricks 以“覆盖”模式写入后从 S3 中删除的所有数据
- android - 斯坦福 CoreNLP 的依赖问题
- r - Shapefile 未正确填充 geom_polygon,与 QGIS/ArcMap 不一致
- python - 如何在 python 中组织包/模块
- c++ - 特征矩阵切片和数据()