当前位置: 首页 > 知识库问答 >
问题:

查找元素与xpath不工作-硒C#

伏欣悦
2023-03-14

我正在测试一个网站,以了解如何在C#中使用硒。我无法找到登录表单元素,因为表单输入元素没有任何标识符,而且xpath在我的代码中不起作用。

我包括了一张inspect元素代码的照片,我在检查相关的登录表单元素时看到了该代码。我的代码如下。

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace SeleniumTest
{
    [TestClass]
    public class UnitTest1
    {
        static void Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("http://www.website.com");
            driver.FindElement(By.LinkText("Login")).Click();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
            driver.FindElement(By.XPath("//div[@id='divLogin']/div[1]/div[1]/div/input")).SendKeys("Username");
            driver.FindElement(By.XPath("Password")).SendKeys("Password");
            driver.FindElement(By.LinkText("Login")).Click();
        }
    }
}

当然,我为密码包含的xpath是一个占位符,但它应该看起来与用户名相似。

在使用chrome的copy复制xpath时

我已经找了几个小时的答案,但什么都找不到。

提前谢谢你的帮助。

共有2个答案

亢琦
2023-03-14

在这里,您可以相对于用户名标签为输入框编写xpath。这将是鲁棒和稳定的xpath。在输入值之前,请确保此输入框已加载到网页中。您可以尝试在输入值之前放置一些等待。

//label[contains(text(),'Username')]/following::input
万俟铭
2023-03-14

您需要改进元素定位器,并在与它们交互之前使用wait-for-element。下面的代码可以输入用户名和密码,然后单击登录按钮。

String url = "http://www.website.com";
driver.Navigate().GoToUrl(url);
driver.Manage().Window.Maximize();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.ClassName("login"))).Click();
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Id("username"))).SendKeys("your username");
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Id("password"))).SendKeys("your password");
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.Id("signin-submit2"))).Click();
Thread.Sleep(4000);-> This is for viewing the page before quitting
driver.Quit();

进口:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

如何使用显式等待:

转到“NuGet package manager”并安装DotNetSeleniumExtras。侍者助手,然后您就可以使用显式等待。

输出:

 类似资料:
  • 我正在删除一个网络应用程序,我需要找到一个特定的元素,但我不能用我的xpath找到它。这是我试图找到元素的HTML代码 我成功地找到了它,但是当我注意到id是自动生成的时,我陷入了困境。我试图解决这个问题,找到包含文字“名字”的标签,然后找到兄弟姐妹,但什么都没有。这是我的xpath:

  • 我需要在HTML中找到此元素 我就是这样做的 使用XPATH,由Chrome控制台生成: 使用XPATH,它正在寻找某种正则表达式: 最后使用XPATH,它通过页面精确到我的元素 他们都没有工作。All给出了一个例外 硒。常见的例外情况。InvalidSelectorException:Message:u'由于以下错误,给定的选择器无法找到具有xpath表达式的元素:\n语法错误:表达式不是合法表

  • 我试着在网页上找到重构元素(时间-分钟)。我的代码只适用于前面的简单文本。现在我使用Ctrl Shift I并指出我的元素和“复制Xpath”。 此外,我还有一个Chrome扩展名“XPath helper”,并试图用它来实现这一点。XPath比我下面的代码要长。而且它也不起作用。 错误:NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,

  • 我注意到,在selenium webdriver中查找xpath元素的函数text()在这种情况下不起作用: 如您所见,文本“Selecionar”位于按钮标记内,但在文本后还有其他标记,在本例中,当我尝试使用此模式通过xpath查找元素时://*[text()='Selecionar']未找到任何元素。 你们都知道在这种情况下,假设使用元素按钮的文本(因为在其他情况下,它将是唯一的选项),如何查

  • 任何提示都会很有帮助!

  • 大家好,我正试图在网站中找到一个元素,但出于某种原因,它不允许我。该网页是Reddit的登录形式,我尝试输入用户名和密码,但当我列出所有输入时,它只出现在顶部搜索栏中。我想这是因为它就像在另一个“标签”一样,它会弹出到前面,但我不知道如何管理它。提前谢谢。