有没有一种简单的方法来创建这些元素的列表,以便我可以循环浏览列表并单击?



我想创建一个"是"按钮列表,以便我可以循环浏览列表并单击"是"按钮,而不是单独定位它们。

当我尝试将它们添加到列表中时,我的计数不正确,因为我不确定如何忽略每个部分中的空列,并且每个部分都有不同数量的按钮。

我通过使用两个 for 循环接近解决这个问题,但我不确定如何处理空列,所以它会搞砸我的循环。

任何提示或帮助将不胜感激。我对这个框架很陌生,所以学习如何解决这样的事情对我的开发很有帮助。我以为我可以搜索所有按钮并使用索引循环浏览它们,但这似乎不起作用:

//button[contains (text(), 'Yes')][x]

这是一个链接!

<div class="section">
<h2 class="section-heading">Section 1</h2>
<div class="section-content">
<div class="grid group">
<div class="grid col span 1_of_2"></div>
<div class="grid col span 1_of_2"></div>
</div>
</div>
</div>
<div class="section">
<h2 class="section-heading">Section 1</h2>
<div class="section-content">
<div class="grid group">
<div class="grid col span 1_of_2">
<div id="button-group">
<button>No</button>
<button>Yes</button>
</div>
</div>
<div class="grid col span 1_of_2"></div>
</div>
<div class="grid group">
<div class="grid col span 1_of_2"></div>
<div class="grid col span 1_of_2"></div>
</div>
<div class="grid group">
<div class="grid col span 1_of_2"></div>
<div class="grid col span 1_of_2"></div>
</div>
<div class="grid group">
<div class="grid col span 1_of_2">
<div id="button-group">
<button>No</button>
<button>Yes</button>
</div>
</div>
<div class="grid col span 1_of_2"></div>
</div>
</div>
</div>

您可以调用 Driver.FindElements 方法来获取按钮列表,例如:

var ListButton =Driver.FindElements(By.XPath("//button[contains (text(), 'Yes')]"));
foreach(var Actualbutton in ListButton )
{
if ( Actualbutton.Displayed && Actualbutton.Enabled )
{
Actualbutton.Click();
}
}

注意:如果在单击按钮后刷新站点,则需要刷新列表,否则您将收到异常reference to object not established as an instance of an object

在这种情况下,您可以执行以下操作:

//collect list of buttonyes
var ListButton =Driver.FindElements(By.XPath("//button[contains (text(), 'Yes')]"));
for(int i=0 ;i<ListButton.Count ;i++ )
{
if(ListButton[i].Enabled &&ListButton[i].Displayed )
{
ListButton[i].Click ( );
System.Threading.Thread.Sleep ( 2000 );
}         
ListButton=Driver.FindElements ( By.XPath ( "//button[contains (text(), 'Yes')]" ) );
}

如果我正确理解了这个问题,你可以使用 querySelector:document.querySelectorAll(".grid > .grid > #button-group > button")选择所有按钮,然后过滤掉所有"否"按钮,然后您就有按钮列表。

我对 C# Selenium 不是很熟悉,但这里有一个它可能看起来像的例子:

IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
var elements = js.ExecuteScript<Array<IWebElement>>("document.querySelectorAll('.grid > .grid > #button-group > button')");

最新更新