如何修复“元素当前不可见”硒& lt; a>元素

本文关键字:元素 lt 何修复 | 更新日期: 2023-09-27 18:13:07

我试图点击<div>内部的<a>元素。这里是html:

<div class="cart__checkout cart__checkout--small">
   <a class="button button--lg button--info button--checkout" title = "Checkout" href = "https://shop.adidas.ae/en/checkout/onepage/">
      <span> Checkout </span>
      <i class="icon-sprite icon-sprite-arrow-white-right-type-4"></i>
   </a>
</div>
<button id="update_cart_action" class = "button btn-update" style = "display: none;" type = "submit" name = "update_cart_action" value = "update_qty" title = "Update Shopping Cart"></button>

如果你想看到原始网站的https://shop.adidas.ae/en/checkout/cart/(你将不得不添加一些东西到你的购物车看到我所看到的)

我试过三种不同的方法:

第一种方法,我的目标是div:

var checkoutButton = driver.FindElement(By.ClassName("cart__checkout cart__checkout--small"));

(点击)

得到错误:

类型为"OpenQA.Selenium"的未处理异常。在WebDriver.dll中发生InvalidSelectorException'附加信息:给定的选择器cart__checkout cart__checkout——small要么无效,要么不会产生WebElement。出现以下错误:InvalidSelectorError:复合类名不允许

为了解决复合类名错误,我尝试了以下代码:
var checkoutButton = driver.FindElement(By.CssSelector("div[class*= 'cart__checkout cart__checkout--small']"));

什么都没有发生,我假设它被点击了,但不是实际的链接被点击(第二个选项)。

我认为这可能是一个有效的方式来点击实际的元素,除了div实际上比链接大得多。我假设selenium在div的中心单击,但是从下面的屏幕截图中可以看到,div的中心没有链接。是否有任何方法来抵消我的Click()功能?

或者,我试着瞄准a:

var checkoutButton = driver.FindElement(By.CssSelector("a[class*='button button--lg button--info button--checkout']"));

这只会给出它不在当前视图中的错误,很可能是因为adiv

之下

错误:

类型为"OpenQA.Selenium"的未处理异常。在WebDriver.dll中发生了ElementNotVisibleException附加信息:元素当前不可见,因此可能无法与

交互。

谢谢你的帮助。我认为我的第二个选择是最好的选择。有没有办法抵消Click() ?谢谢。

如何修复“元素当前不可见”硒& lt; a>元素

您的CSS选择器有点关闭。注意两个类之间的"。"。此外,您可以专门针对a。试试这个:

var checkoutButton = driver.FindElement(By.CssSelector("div.cart__checkout.cart__checkout--small a"));

也许你可以使用:

ILocatable hoverItem = (ILocatable)driver.FindElement(By.XPath("//*[@id='js-minicart']"));
IMouse mouse = ((IHasInputDevices)driver).Mouse;
mouse.MouseMove(hoverItem.Coordinates);

检查<a>元素后:

driver.FindElement(By.Xpath('//*[@id="js-minicart"]/li/div[2]/div[3]/div[4]/ul/li/a/span'));

您应该尝试使用WebDriverWait等待,直到元素可见,并启用与ExpectedConditions.ElementToBeClickable单击,然后进行交互,如下所示:-

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement checkOut = wait.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("a.button--checkout[title ='Checkout']")));
checkOut.Click();

我已经能够获得该按钮并使用以下XPATH单击它:

//*[@id = 'cart-form']//a[@title = 'Checkout']

在c#中你可以这样做:

var checkoutButton = driver.FindElement(By.XPath("//*[@id = 'cart-form']//a[@title = 'Checkout']"))

如果您想更好地理解XPATH,我可以为您详细说明。