I am executing simple java program and trying to execute my first selenium script.
public static void main(String[] args) {
// Create a new instance of the html unit driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
WebDriver driver = new HtmlUnitDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
driver.quit();
}
these are the dependencies that i have added:
But after running this code I am getting this exception in eclipse.
java.lang.ClassNotFoundException: org.apache.xerces.xni.XNIException
ClassNotFoundException occurs mostly when the class file is not found in the specified class path. So try removing the xerces.jar and add it again.
Related
In one of my project (.net core 3.1), I need a way to redirect System.Diagnostics.Trace.WriteLine to Serilog file. I found the SerilogTraceListener package which seems to be the right candidate.
Unfortunately until now, I haven't been able to find a way to make it works.
To reproduce it,
1) Create a .net core console project
2) Add the following nuget package : Serilog, SerilogTraceListener, Serilog.Sink.Console, Serilog.Sink.File
3) Overwrite the Program class code by the following
class Program
{
static void Main(string[] args)
{
// Works fine
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("log.txt")
.CreateLogger();
Log.Logger.Information("A string written using Logger.Information");
// Trace is written in the console but not in the file
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.Listeners.Add(new global::SerilogTraceListener.SerilogTraceListener());
System.Diagnostics.Trace.WriteLine("A string written using Trace.WriteLine");
}
}
What am I doing wrong?
TL;DR; You need to set the MinimumLevel to Debug or Verbose in order to see the Trace.WriteLine messages.
SerilogTraceListener maps System.Diagnostic.TraceEventType to Serilog.LogEventLevel, and when you call Trace.WriteLine, it maps these events to the Debug log event level.
That means Serilog's logger is receiving a message of type LogEventLevel.Debug.
The minimum level configured in Serilog by default is Information, which means Debug messages are being suppressed.
You have to configure the MinimumEventLevel to Debug (or Verbose) in order to see the Trace.WriteLine messages:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug() // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.WriteTo.Console()
.WriteTo.File("log.txt")
.CreateLogger();
Actually I am executing my selenium test by reading test case data from excel.I wanted to fetch whether the test result is Passed or failed after execution of my first test case and write it in front of test case then y second test case and write it in front of test case and so on .
Before execution of my test case excelsheet screenshoot
http://i.stack.imgur.com/L2LNz.png
after execution of my test cases excelsheet screenshoot
http://i.stack.imgur.com/mMivW.png
You can fetch the results using TestNG. TestNG contains default listeners which reads if your test passed/failed/was skipped.
To set this data in excelsheet you need to create a class that implements from ITestListener
public class ExcelListener implements ITestListener
If you use any IDE, you should see a warning about need of creating unimplemented methods. Allow system to create them and you should see methods like
#Override
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
}
Then all you have to code is
1. Open excel file
2. Find the right column
3. Insert status
To do that I recommend using Java Excel API.
To read existing excelsheet you need to provide absolute path, workbook name and a sheetname. Here's my code for method getExcel
public void getExcel(String filePath, String sheetName, String fileName) throws BiffException, IOException {
String absolutePath = filePath.concat("/").concat(fileName);
file = new FileInputStream(new File(absolutePath));
workbook = Workbook.getWorkbook(file);
worksheet = workbook.getSheet(sheetName);
}
After getting an excel file, you need to iterate through data.
You can provide exact column and row.
Hope it helps!
EDIT:
Place a listener like this
#Listeners(MyExcelListener.class)
public class MyTestClass {
}
I need to write a code for competition using STDIN and STDOUT, how can I set up eclipse to take input from STDIN??
When I was just using editor and command line I was running:
java Hatch < hatch_input
Now I need the equivalent to work directly from eclipse. It would be perfect if I could use it directly from file, but it would to suffice to just be able to paste the actual input somewhere, as long as I can write code that takes STDIN directly in eclipse by clicking RUN.
class Main{
public static void main (String[] args) throws java.lang.Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
}
}
Above code is what I am trying to achieve.
When you run your program you can setup a run configuration. Just click on on the arrow next to the play button and choose "Run configurations..."
In the new run configuration dialog you create a new Java application run configuration. In the tab "Arguments" you can enter the arguments you want the program to receive.
Suggestion: In the last tab, "common", choose to save it as a shared file, this will create a *.launch file that you can use to quickly run the program. You can also create different launch files for different inputs.
You can also just type in the input data or copy paste in the console window of the eclipse. for Sdtin when the program hits that point focus shifts to console and waits for the response.
There is following code,which i tried. this code is working fine if you run program in command prompt, but in eclipse not working because there console are no longer waiting for user input and give the java.lang.NullPointerException.
if you are read data by user input you can use System.in.read(). and this is also working in eclipse console.
In this code you can get Data from user but this data is not args which we throw at run time...
public class CONSOLE
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Console c = System.console();
System.out.println("Enter Username : \t");
String u = c.readLine();
System.out.println("Enter Password : \t");
char[] p = c.readPassword();
System.out.println("USERNAME : "+u);
System.out.println("PASSWORD : "+String.valueOf(p));
}
}
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
I need to give a input text file in GWT FileUpload and test it using Selenium Webdriver.
I have Upload widget, In that I need to give a text file as input. Then click a upload button to do my functionality.
i tried this,
driver.findElement(By.id("uploadField")).sendKeys("C:/Desktop/Input.txt");
driver.findElement(By.id("uploadButton")).click();
but I'm not able to give input to this upload field.
Can anyone help me?
See this code is working for me see : use correct file path in sendkeys
driver.get("http://www.freepdfconvert.com/");
driver.findElement(By.id("UploadedFile")).sendKeys("C:\\Users\\username\\Downloads\\HP1.pdf");
try {
Thread.sleep(4000);
}
catch (Exception e) {}
driver.findElement(By.name("pdfsubmit")).click();
}
or
driver.findElement(By.id("uploadField")).sendKeys("C:/xyz.txt");
driver.findElement(By.name("uploadButton")).click();
Use name or Xpath then check .
Edit
Yes it run for all browser but for IE and chrome you have to add small code.
IE:
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new InternetExplorerDriver(ieCapabilities);
Chrome
File file = new File("E://chromedriver.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver();`
I've got a jFrame Form with an action handler that instantiates a new form and switches over to it using setVisible(true). That much works.
When I try to setVisible(false) on the current form, however, I get an error:
cannot find symbol
symbol: method setVisible(boolean)
location: class foo.bar
----
My action handler looks like this:
public void Login() {
//#TODO Log in code
setVisible(false); // <-- Error here
mainPage.mainScreen ms = new mainPage.mainScreen();
ms.setVisible(true);
}
I was trying to hide the "main" view, so to speak, and netbeans won't allow this. I can instantiate a different view, show it, and it can show and hide itself all day long.