c#webdriver selenium单击不使用onclick处理html表
我们有一个html表,上面有javascript onclick函数。我面临selenium click方法的问题c#webdriver selenium单击不使用onclick处理html表,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我们有一个html表,上面有javascript onclick函数。我面临selenium click方法的问题 <table id="somedynamicID" onclick="PerformClick();" class="Level2Item" > <tbody> <tr><td ><img src="imagePath" alt=""></td></tr> <tr><
<table id="somedynamicID" onclick="PerformClick();" class="Level2Item" >
<tbody>
<tr><td ><img src="imagePath" alt=""></td></tr>
<tr><td width="100%" nowrap="" id="somedynamicID" >Link Text</td></tr>
</tbody>
</table>
以上代码无效,请帮助我。试试这个
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(100));
var Table = driver.FindElement(By.ClassName("Level2Item"));
IWebElement myrow = Table.FindElement(By.XPath("//tr/td[contains(text(), 'Link Text')]"));
myrow.Click();
我想你想要这样的东西:
public static bool FindInTableAndClick(IWebDriver driver, string TableID, string StrToFind)
{
IWebElement tableElement = driver.FindElement(By.XPath("//table[contains(@id, '" + TableID + "')]"));
ICollection<IWebElement> trCollection = tableElement.FindElements(By.XPath("id('" + tableElement.GetAttribute("id") + "')/tbody/tr"));
ICollection<IWebElement> tdCollection = null;
foreach (var tr in trCollection)
{
if (tdCollection != null)
{
foreach (var td in tdCollection)
{
if (td.Text.ToLower().Contains(StrToFind.ToLower()))
{
td.Click();
return true;
}
}
}
i++;
}
return false;
}
公共静态bool findinTable并单击(IWebDriver驱动程序、字符串TableID、字符串strofind)
{
IWebElement tableElement=driver.FindElement(By.XPath(//table[contains(@id,“+TableID+”)]);
ICollection trCollection=tableElement.FindElements(By.XPath(“id(“”+tableElement.GetAttribute(“id”)+”)/tbody/tr”);
ICollection tdCollection=null;
foreach(trCollection中的var tr)
{
if(tdCollection!=null)
{
foreach(tdCollection中的var td)
{
if(td.Text.ToLower().Contains(strofind.ToLower()))
{
td.Click();
返回true;
}
}
}
i++;
}
返回false;
}
它不工作了怎么办?您遇到了什么类型的错误?我们在运行模式“System.NullReferenceException:对象引用未设置为对象的实例”中遇到了错误。但在调试模式下,它工作正常。是否可以执行类似IWebElement myrow=driver.FindElement(By.XPath(“//table)”的操作[contains(@class,'Level2Item')]/tr/td[contains(text(),'Link text')”);myrow.Click();然后您必须使用likeIWebElement myrow=driver.FindElement(By.XPath(//table[@class='Level2Item']///tr td[contains(text(),'Link text')]))
Hi Pranav我们是否需要等待运行此代码,因为它在调试模式下工作,但在运行模式下出错。这取决于页面加载时间,如果需要,则可以使用driver.Manage().Timeouts().implicitywait(TimeSpan.FromSeconds(100));
感谢Pranav为我工作driver.Manage().Timeouts().implicitywait(TimeSpan.FromSeconds(100));var Table=driver.FindElement(By.ClassName(“Level2Item”);IWebElement myrow=Table.FindElement(By.XPath(//tr/td[contains(text(),'Link text')));myrow.Click();
public static bool FindInTableAndClick(IWebDriver driver, string TableID, string StrToFind)
{
IWebElement tableElement = driver.FindElement(By.XPath("//table[contains(@id, '" + TableID + "')]"));
ICollection<IWebElement> trCollection = tableElement.FindElements(By.XPath("id('" + tableElement.GetAttribute("id") + "')/tbody/tr"));
ICollection<IWebElement> tdCollection = null;
foreach (var tr in trCollection)
{
if (tdCollection != null)
{
foreach (var td in tdCollection)
{
if (td.Text.ToLower().Contains(StrToFind.ToLower()))
{
td.Click();
return true;
}
}
}
i++;
}
return false;
}