我是初学者,我正在尝试编写Selenium网络驱动程序。我正在使用eclipse并尝试在下一栏中找到可用的链接。在每一行中我都有不同的链接。例如,在我的员工数据表中,我在一个页面中有2列和10行。第一列包含person的名称,第二列包含其员工ID(ID是超链接)。我正在尝试选择任何员工的超链接,但我无法做到。
我有HTML代码和示例脚本。
<span id="37">
<div class="clear"></div>
<div id="FC_Schema.1021.WIP" type="DataCheckingList" name="FC_Schema.1021.WIP">
<input id="baseurl" type="hidden" value="/Web/" name="baseurl">
<input id="hdnDcCnt" type="hidden" value="13" name="hdnDcCnt">
<input id="PageNo" type="hidden" value="1" name="PageNo">
<meta content="width=device-width" name="viewport">
<style type="text/css">
<div id="DataCheckingLoad">
<div id="SupplyChainTabs">
<div id="gbo" class="InnerAlertsTabs">
<table id="one" class="draggable" width="100%">
<thead>
<tbody>
<tr>
<td valign="top" align="center">
<td valign="top">
<td valign="top">
<a onclick="return ButtonClick(this,'TxnyD.Communities.2.1','Org.2000476_Product.THQS|SMS|Questionnaire.WIP_Questionnaire_TxnyD.Communities.2.1_THQS_TxnyD.Operationaloffice.1.2');" href="#f">Axiom
Process LLC</a>
<div class="country-name">
<div class="CompanyInfoContactLinks">
</td>
<td valign="top">
THQS
<div class="clear"> </div>
<a id="Org.2000476_Product.THQS|SMS|Questionnaire.WIP_Questionnaire_TxnyD.Communities.2.1_THQS_TxnyD.Operationaloffice.1.2" onclick="RedirectToQuestionnairePage(id)" href="#">THQS</a>
<div class="clear"> </div>
</td>
在上面的代码中,第一列包含公司名称,即“Axiom Process LLC“和第二列包含公司订阅名称,即”THQS“。我必须选择公司”Axiom Process LLC“的THQS链接
为它设计的Selenium脚本如下
public static void main(String[] args) throws Exception {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://XXX.XXX.XXX.XXX/Web");
Thread.sleep(1000);
driver.findElement(By.xpath("//input[@id='UserName']")).sendKeys("Gbouser.1");
driver.findElement(By.xpath("//input[@id='Password']")).sendKeys("****");
driver.findElement(By.xpath("//input[@name='Login']")).click();
driver.findElement(By.xpath("//a[contains(text(),'Task')]")).click();
driver.findElement(By.xpath("//a[contains(text(),'Data Checking')]")).click();
driver.findElement(By.partialLinkText("Axiom")).findElement(By.xpath("//a[contains(text(),'THQS')]")).click();
}
所以基本上这些都是动态表,每次都有不同的记录。如何选择列中可用的链接?
我也尝试过以下脚本:
driver.findElement(By.name("*[id^='CLS'][id$='Demolition Limited']")).findElement(By.xpath("//a[contains(text(),'THQS')])[3]")).click();
答案 0 :(得分:0)
欢迎来到Stackoverflow。在回答你的问题之前,只需几点。认为你有一个downvote&因为你没有很好地格式化你的问题。否则一个完全合法的问题,你会得到更早的帮助。
其次,请不要输入真实的网站地址,用户名和密码:)。我能够登录,并准确理解你需要什么,但一个恶意的人可以在那里做坏事。
要回答您的问题,请尝试此
,而不是导致您出现问题的行 Thread.sleep(3000);
TablePageObject tablePageObject = PageFactory.initElements(driver, TablePageObject.class);
tablePageObject.clickLink("Axiom");
TablePageObject在哪里
public class TablePageObject {
private WebDriver driver;
@FindBy(css = "table tr")
private List<WebElement> allTableRows; // find all the rows of the table
public TablePageObject(WebDriver driver) {
this.driver = driver;
}
public void clickLink(String companyName) {
for(WebElement row : allTableRows) {
List<WebElement> links = row.findElements(By.cssSelector("a"));
// the first link by row is the company name, the second is link to be clicked
if (links.get(0).getText().contains(companyName)) {
links.get(3).click();
}
}
}
}
解释,TablePageObject类将是您尝试控制的动态表的程序化句柄。它遵循硒的页面工厂模式,我衷心推荐,你可以在这里了解更多https://code.google.com/p/selenium/wiki/PageFactory
它基本上保存了表格的行集合,或多或少看起来像:
<tr>
<td valign="top" align="center">
// irelevant
</td>
<td valign="top">
// irelevant
</td>
<td valign="top">
<a>Axiom Process LLC</a>
<a>company details</a>
<a>web details</a>
</td>
<td valign="top">
<a>THQS</a>
</td>
<td valign="top" align="center" style="display: none">
// irelevant
</td>
<td valign="top">
//irelevant
</td>
<td valign="top">
// irelevant
</td>
<td valign="top">
</td>
<td>
</td>
</tr>
您从表中收集所有链接,根据第一个链接检查公司名称,如果匹配,请单击第四个链接,
希望它有所帮助,最好,
顺便说一下,我在问题中掩盖了你的密码