【发布时间】:2018-06-28 18:15:39
【问题描述】:
大家好,我正在尝试单击 Webtable 的每个页面上存在的 WebElement(CheckBox)(即 WebTable 的分页),但我想单击通过 Xpath 传递的特定复选框。
以下是我尝试过的代码
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。因为页面只是被点击一次,它不会对 WebTable 的每个页面进行迭代并检查该 Perticular Checkbox 的存在。
此 xpath 发生异常: //a[contains(text(),'nnn jhjhjk')]/parent::*/preceding-sibling::*/child::*
我不明白我在这里缺少什么,希望我很清楚。任何帮助将不胜感激。谢谢
【问题讨论】:
-
您能否也添加一个网页示例
-
请保留该元素的html
-
@Ab123,您是返回到您的分页元素所在的上一页,还是点击
elem.click()后您登陆的页面上的链接可用?在我看来,您单击一次,进入下一页,然后不执行driver.navigate().back();。是它还是别的什么? -
@NuOneTAttygalle,@bhupathi turaga, HTML 添加
-
@eduPeeth 我不会回到上一页,我只是在下一页上检查 WebElement 的存在,如果在第一页上找到元素然后单击它,否则导航到下一页。希望我清除