C# 为什么模态窗口没有';被selenium单击时不会显示
我试着点击登录按钮ập) 显示登录框,但未能实现 登录框没有显示 Selenium、webdriver都是最新版本C# 为什么模态窗口没有';被selenium单击时不会显示,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我试着点击登录按钮ập) 显示登录框,但未能实现 登录框没有显示 Selenium、webdriver都是最新版本 using (IWebDriver driver = new ChromeDriver()) { driver.Navigate().GoToUrl("http://sinhvienit.net/forum/"); // driver.Manage().Timeouts().Implic
using (IWebDriver driver = new ChromeDriver())
{
driver.Navigate().GoToUrl("http://sinhvienit.net/forum/");
// driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
// driver.FindElement(By.XPath("//a[@href='#loginform']//span")).Click();
// driver.FindElement(By.XPath("//a[@href='#loginform']")).Click();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.ElementExists(By.XPath("//a[@href='#loginform']"))).Click();
wait.Until(ExpectedConditions.ElementExists(By.XPath("//a[@href='#loginform']//span"))).Click();
wait.Until(ExpectedConditions.ElementExists(By.Id("navbar_username")));
wait.Until(ExpectedConditions.ElementExists(By.Id("navbar_password")));
// var loginBox= wait.Until(ElementIsClickable(By.Id("loginform"))); >> fail
driver.Scripts().ExecuteScript("document.getElementById('navbar_username').style.display='inline';");
driver.Scripts().ExecuteScript("document.getElementById('navbar_password').style.display='inline';");
Console.ReadKey();
}
C#扩展:
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
有两个问题。 1-当您导航到该站点时,在实际论坛页面之前会出现一个网页。以下是该项目的图片: 因此,您必须单击上面突出显示的按钮。之后,您将能够导航到论坛页面。 2-您的按钮肯定会被单击,但由于网页未正确加载,因此单击操作不会继续 因此,您需要等待页面正确加载时加载的特定元素。 以下代码将帮助您解决此问题:-
using (IWebDriver driver = new ChromeDriver())
{
driver.Navigate().GoToUrl("http://sinhvienit.net/forum/");
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30)); //Give the implicit wait time
driver.FindElement(By.XPath("//button[@id='btnSubmit1']")).Click();// Clicking on the button present in prior page of forum
//Waiting till the element that marks the page is loaded properly, is visible
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='vtlai_topx']/a")));
driver.FindElement(By.XPath("//a[@href='#loginform']")).Click();
然后可以继续使用rest。
driver.FindElement(By.XPath(“//a[@href='#loginform'])。单击()代码>应该可以工作。如果您先等待它会怎么样:wait.Until(ExpectedConditions.ElementExists(By.XPath(//a[@href=''loginform'])。单击()
?谢谢,但它也不起作用。奇怪。它很少出现,只是不知道你为什么要尝试不同的浏览器?是的,我用firefoxdriver尝试过,它仍然是一样的。如果你删除隐式等待
调用-只在显式等待的情况下尝试?我很确定OP会注意到在浏览器中没有显示登录按钮浏览器:)@alecxe:True。。我的错。我有时想得太多了我在编辑上述代码时考虑到了这一点,以及其中一个新发现的问题。当我在“SeleniumWebdriver Java”中制定相同的规则时,这在FF和Chrome中都可以很好地工作。。