c#webdriver selenium单击不使用onclick处理html表

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><

我们有一个html表,上面有javascript onclick函数。我面临selenium click方法的问题

<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();然后您必须使用like
IWebElement 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;
    }