I am using appium 6.1.0 which has <T extends WebElement> T findElement(By by); method on WebDriver class. Somewhere in automated tests I have following APIs -
protected String getText(WebElement element) {
return getText(element, Config.LOAD_WAIT);
}
and
protected String getText(By by) {
return getText(by, Config.LOAD_WAIT);
}
And getText method is invoked by test as -
public String getFullName() {
return getText(driver.findElement(By.cssSelector(".basicDataSection)))
}
But using WebDriver class from appium dependency throws exception on getFullName method about method call being ambiguous since it matches both getText(WebElement element) and getText(By by) How is this possible since findElement return type is T extends WebElement in WebDriver class in appium dependency?
On a different note, there is also WebElement findElement(By by); API in WebDriver class in selenium-api but after adding appium dependency method in my project they have begun to refer to WebDriver class from appium dependency and not from selenium-api dependency. Unfortunately WebDriver api in both classes have same package org.openqa.selenium.
I am not sure if WebDriver class from appium and selenium-api can be used interchangeably as they have different automation purpose (i.e. mobile app and web app). If WebDriver class from appium and selenium-api can not be used interchangeably then is there a way to enforce to use WebDriver class from selenium-api dependency and not from appium dependency?
Consider using MobileElement instead of WebElement to avoid clashes with underlying Selenium API
Make sure to have only appium-java-client library in your project dependencies, Appium 6.1.0 assumes Selenium 3.12.0 so you have to use exactly this version of Selenium in order to avoid Jar Hell so I would recommend using dependency management solution like Maven or Gradle to automatically resolve Appium Java client library and all its transitive dependencies. See Code Examples -> Appium with Java for comprehensive information and sample projects
How to clear pre-filled text box value using java in appium?
I have tried all possible solution available on Internet but not works for me.
I have used .clear() and .sendKey() both method and it's working fine in Android 6.0 and below version. but it does not working after Android 7.0 or above version.
Here is my code,
driver.findElement(By.id("com.example.appName:id/text_user_name")).clear();
driver.findElement(By.id("com.example.appName:id/text_user_name")).sendKeys("Automation");
I'm trying to automate my android application using below configuration:
Appium-Desktop 1.7.2.
selenium-java 3.8.1
selenium-server 3.8.1
java-client 5.0.4
Yes, I also ran on this in few occasions, this is not most beautiful code, but works quite good in a pinch:
public void clearTxt(WebElement element) throws Exception{
element.click();
element.sendKeys(Keys.CONTROL + "A"); //select all
element.sendKeys(Keys.DELETE);
}
or
element.sendKeys("")
or
Actions navigator = new Actions(driver);
navigator.click(element)
.sendKeys(Keys.END)
.keyDown(Keys.SHIFT)
.sendKeys(Keys.HOME)
.keyUp(Keys.SHIFT)
.sendKeys(Keys.BACK_SPACE)
.perform();
one of this should be enough...
am unable to open browser using geckodriver 3.8.1 and selenium oxygen and firefox 57.0.4(32 bit) version
package Selenium_JavaFundamentals;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class opengmail {
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.com");
}
}
I am getting following error:
Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver system property; for more information, see https://github.com/mozilla/geckodriver. The latest version can be downloaded from https://github.com/mozilla/geckodriver/releases
at com.google.common.base.Preconditions.checkState(Preconditions.java:754)
at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:124)
at org.openqa.selenium.firefox.GeckoDriverService.access$100(GeckoDriverService.java:41)
at org.openqa.selenium.firefox.GeckoDriverService$Builder.findDefaultExecutable(GeckoDriverService.java:141)
at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:339)
at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:158)
at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:120)
at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:98)
at Selenium_JavaFundamentals.opengmail.main(opengmail.java:10)
Please note that I have loaded the gecko driver.
You need to explicitly tell it where the WebDriver is.
Like this:
package Selenium_JavaFundamentals;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class opengmail {
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new FirefoxDriver();
System.setProperty("webdriver.gecko.driver", "/path/to/geckoDriver.exe");"
driver.get("https://www.google.com");
}
}
From some research, I came across that
WebDriver uses native browser approach. Selenium offers inbuilt driver
for Firefox but not for other browsers. All drivers (Chrome Driver, IE
driver, etc.) are built based on the special JS Engine used by each
browser.
So I suppose
System.setProperty("webdriver.gecko.driver","/path/to/geckoDriver.exe");"
isn't required for Firefox after all.
What seems to be the issue here is broken Firefox installation in your machine. Scrub your current installation completely and do a fresh install of the compatible Firefox. (Optional- Also you can put the Firefox.exe path in your PATH in Environment Variables.)
For this issue, i simply downgraded my firefox browser version- 43 this issue got resolved after downgrading the browser
Set the geckodriver.exe location first before initializing the FirefoxDriver.
For selenium 3.x with Firefox
System.setProperty("webdriver.gecko.driver", "path.to.geckodriver.exe");
WebDriver driver = new FirefoxDriver();
Since the 7th of February all my tests are failing with the same error; the log entry reads:
RESPONSE MaximizeWindow unknown error: cannot get automation extension
from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
(Session info: chrome=57.0.2987.21)
I'm not sure if this is caused by a Chrome update or something else - the message is vague enough as it is.
EDIT: I am using C#, and the latest Chromedriver.
You need the latest version of chromedriver.exe. https://sites.google.com/a/chromium.org/chromedriver/downloads
This is needed for chromedriver version 57+
I was having this same issue. Once I updated the chromedriver version everything worked again.
Suddenly got this error -> Additional information: unknown error: cannot get automation extension from unknown error: page could not be found: chrome-extension..
This issue exists even when using ChromeDriver 2.29
What solved it though was removing this line.
driver.Manage().Window.Size = new Size(1024, 768);
A quick fix but really not the one I've been looking for.
Would be great to still use the sizing mechanism.
This could probably because the environment where you are running the tests is blocking all the third party extensions in chrome browser. Give it a try with disabling the extensions.
something like below:
ChromeOptions o = new ChromeOptions();
o.addArguments("disable-extensions");
o.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(o);
As mentioned above, it's related to the chromedriver.
In the release notes of version 2.33, it's mentioned that they fixed an issue related to resizing/positioning.
Latest Release: ChromeDriver 2.33
Supports Chrome v60-62
Changes include:
Fixes a bug which caused Resizing/Positioning Window commands to fail on Chrome 62+.
Instead of downloading the chrome driver manually, it's better to update the version of chromedriver in package.json (or similar file) and fire npm install to get the latest version auto downloaded.
Try to use Webdrivermanager from
io.github.bonigarcia library
It will automatically load the latest version of your's webdriver and so you will not need to update it from time to time.
Just call for example:
ChromeDriverManager.getInstance().setup();
before calling the webdriver itself to get the latest version of ChromeDriver.
Updating your chrome driver exe would not actually fixed this issue, if you observed, it is happening while you're re-sizing chrome
driver.Manage().Window.Maximize();
Try to comment this line and try again.
It's a quick fix, I'll update my answer once I find the root cause of this(however it seems because of browser update as nothing was changed in code for me).
Update:
For me, it seems to be because of browser update as once I updated again this issue was gone.
I faced the issue, too. I have replaced the existing chrome driver which I had in my C folder with new chrome driver downloaded from https://sites.google.com/a/chromium.org/chromedriver/downloads, which resolved the issue.
I had the same issue. Just downloaded the latest release of chromedriver and that solved the problem.
https://sites.google.com/a/chromium.org/chromedriver/downloads
With the last headless version, you can't resize the window as there isn't any window anymore.
For my own case, I was experiencing this issue with behat, I used to resize the window with previous versions of chrome of firefox, I surround the following line:
$this->getSession()->resizeWindow(1600, 1200, 'current');
with a simple check on the driver:
if (($this->getSession()->getDriver() instanceof Selenium2Driver)) {
$this->getSession()->resizeWindow(1600, 1200, 'current');
}
I had started getting the same error in April, shortly after this question. I was able to get around it by installing a new beta version and starting like so:
webdriver-manager start --versions.standalone 3.0.0-beta4 --versions.chrome=2.28
This was working perfectly until a few days ago. I tried removing the offending setSize() from my Protractor conf file and it works again. But whenever my tests start, it also spawns another Chrome window navigated to chrome://settings/help. Weird.
I checked my Chrome update history and see it updated from v61 to v62 last week, so that must have broken it. I guess I need to update my driver once more.
Update: For those that want to quickly know how to update their driver:
webdriver-manager update --versions.chrome=2.33
Don't forget to specify the driver when starting the server.
Thanks
for this -- it helped me after so much R&D
cannot-get-automation-extension
ChromeOptions o = new ChromeOptions();
o.addArguments("disable-extensions");
o.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(o);
My issue got resolved post adding this comment, thankyou so much.
ChromeOptions o = new ChromeOptions();
o.addArguments("disable-extensions");
o.addArguments("--start-maximized");
o.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(o);
update your protractor and run your test cases it will start executing, there are few new stuff added from Protractor, this method worked for me.
update protractor - npm install -g protractor
update webdrvier - webdriver-manager update
it supports the higher versions of chrome driver 2.29.
pls. find the latest chrome drivers in http://www.seleniumhq.org/download/
After I updated from GAE-JAVA-SDK-1.5.5 to 1.6.0 and 1.6.1 my app stop functioning properly. it started giving an error on the RPC service.
Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract void com.skip.school.client.service.AdminService.addStudent(com.skip.school.shared.Student)' threw an unexpected exception: java.lang.NoClassDefFoundError: Could not initialize class com.skip.school.server.PmfSingleton
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.skip.school.server.PmfSingleton
The whole log can be found here pastebin.
I have a singleton that should be initialized when the user starts there first rpc call.
The singleton I use should be correct there are many example found here on stackeroverflow and everywhere on the web.
public final class PmfSingleton {
private final static PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PmfSingleton() { }
public static PersistenceManagerFactory get() {
return pmfInstance;
}
}
I call that class in all my server implementations like so.
PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
this works on sdk 1.5.5 and below but not on sdk 1.6.0 and above, does anyone know what I' doing wrong what i should change if i want to use sdk 1.6.0 and above?
I read somewhere else that this problem is related to an out dated version of the datanucelus jars. I've updated to the latest version, v1.6.1 available from the eclipse plugin and I fixed it by deleting all old references to the old jars, leaving behind just these 3:
datanucleus-appengine-1.0.10.final.jar
datanucleus-core-1.1.5.jar
datanucleus-jpa-1.1.5.jar
I hope that works for you!
I had this same problem after upgrading to a newer version of AppEngine SDK. It turns out the problem was I had an older version of the appengine-api-1.0-sdk jar hanging around in the deployment folder.
Have a look in the war\WEB-INF\lib folder of your application and see if there are two different versions of appengine-api-1.0-sdk-1.x.y.jar. I fixed it by removing the appengine-api-1.0-sdk-1.5.x file.