好,所以我尝试单击xpath正确的复选框,因为我已经使用Clickable.Click()在WebDriverWait中尝试了它。等等,但是只有当我向下滚动页面并且它可见时,它才起作用。我已经找到了用javascript和一些硒编写的scrollviewandclick代码。因此,基本上,如果我想滚动并单击视线之外的任何内容,我只需使用
objCommon.ScrollInToViewAndClick(driver.FindElement(By.Xpath("YOUR Locator")));
正如我之前所说的,如果使用以下代码将鼠标移至页面下方的复选框,它会单击:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(driver.FindElement(By.Xpath("YOUR Locator"))).Click();
但是我希望更改我的javascript / Selenium scrollviewandclick方法以合并此单击,但是这不会让我等待2次。有人可以建议我要去哪里了吗。
下面的scrollviewandclick方法:
public void ScrollInToViewAndClick(IWebElement element)
{
IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
executor.ExecuteScript("arguments[0].scrollIntoView(true);", element);
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
var elementList = new List<IWebElement>
{
element
};
var readonlyCollection = new ReadOnlyCollection<IWebElement>(elementList);
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.VisibilityOfAllElementsLocatedBy(readonlyCollection));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element)).Click();
}
答案 0 :(得分:1)
您正在调用Wait.Until()上的.Click() 在最糟糕的第二次等待之后,您应该使用element.Click()。
答案 1 :(得分:-1)
您可以连续两次等待而不会出现问题,我不确定您遇到什么错误。看到您似乎对Selenium感到陌生,让我解释一些事情并提出一些建议:
您出于某种原因将一个WebElement
转换为一个集合?想必您可以使用VisibilityOfAllElementsLocatedBy()
吗?您无需执行此操作,因为此等待方法有一个单一版本ElementIsVisible()
。
您无需等待元素可见然后单击即可。为了使元素可单击,必须使其可见,因此只需单击即可。
如果您尝试滚动到一个可见的元素,则会收到错误消息。因此,请等待该元素可单击(可见),滚动到该元素,然后单击它。
牢记这三件事,我将您的代码重写到下面。
public void ScrollInToViewAndClick(IWebElement element)
{
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);
element.Click();
}