问题
I am using our existing tool that works perfectly using the Firefox and Chrome implementations of the Selenium IWebdriver.
I am now doing some experimentation using the PhantomJS implementation. So far so good. However, as soon as I want to click a button it does nothing.
I can retrieve the element, however, looking closer at its properties the 'Selected' property states the following:
Error Message => 'Element is not selectable' caused by Request => {"headers":{"Accept":"application/json, image/png","Connection":"Close","Host":"localhost:37704"},"httpVersion":"1.1","method":"GET","url":"/selected","urlParsed":{"anchor":"","query":"","file":"selected","directory":"/","path":"/selected","relative":"/selected","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/selected","queryKey":{},"chunks":["selected"]},"urlOriginal":"/session/fcaf88a0-40b4-11e3-960d-bdce3224aacf/element/%3Awdc%3A1383063211142/selected"}
I would gather this is the cause that my click is not executed, however, I cannot make heads or tails from this error message. using Google did not help either.
Any help would be much appreciated.
Thanks in advance.
回答1:
We had a lot of similar issues with PhantomJS.
So, couple of steps to figure out what the root cause to it
Set you screen size (as suggested in comments; PhantomJS uses 400x300 by default):
driver.Manage().Window.Size = new Size(1920, 1080); //Size is type in System.Drawing"
Use to verify that your element is actually visible:
new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementExists((By.Id(login))));
Click on the element with Javascript
IJavaScriptExecutor js = _driver as IJavaScriptExecutor; js.ExecuteScript("arguments[0].click();", buttonToClick); //buttonToClick is IWebElement
For Java it would be as follows:
Screen size
driver.manage().window().setSize(new Dimension(width, height));
Verifying element is visible
WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("LOCATOR")));
Clicking with JS
JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript("arguments[0].click();", buttonToClick); //buttonToClick is WebElement
来源:https://stackoverflow.com/questions/19663963/element-click-not-executed-when-using-phantomjs-selenium-webdriver-in-net