Skip to main content

Prepared database statement and casting

Though database testing is not directly possible from selenium but if you have followed selenium database testing video then you know how you can use jdbc to perform database operation from within your java selenium tests. 

I came across an interesting problem today when I had to insert value in a database table. On the surface corresponding database insert code looks very easy - 




But its execution fails on line 16 with error - 

ERROR: column "user_id" is of type integer but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 163

The problem lies in the following line - 

queryBuilder.append("VALUES ('TRUE',?,2,'gift code [BoGJRhmTmImKJlrlFnBlZd+j2dBO3M9a]','50000','1060262','1');");

Herein user_id is represented by "?" and later replaced by real user_id in following line - 

updateCreditAccount.setString(1, UserModel.getUserId();

But user_id is of type integer in databse hence it needs to be cast from character to integer. This can be done by replacing "?" with "?::integer" in "VALUES" statement. Hence modified code looks as (Notice the change in line - 7) - 



And this works now :)

Comments

Popular posts from this blog

Which location strategy to use with mobile apps

Locator Strategy for native mobile apps IDs and accessibility locators are still king. NSPredicate (iOS) and UIAutomator (Android) are great—mainly better than XPath —but they do not beat a good accessibility id or resource-id . And CSS selectors don’t exist for native apps (only for WebViews). Locator Strategy Ranking Rank iOS (native) Android (native) Why 1 Accessibility ID → name / label (via MobileBy.AccessibilityId or @iOSXCUITFindBy(accessibility = "Mehr anzeigen") ) Accessibility ID → content-desc (via MobileBy.AccessibilityId ) or @AndroidFindBy(accessibility = "Letzte Aktivitäten, Überschrift") ) Fast, readable, stable when set intentionally; improves a11y. 2 Stable identifiers (rare on iOS) resource-id (via new UiSelector().resourceId(...) ) or @AndroidFindBy(id = "load_more") id is just shorthand for matching the native Android resource-id attribute. Appium automatically maps id → resource-id If you pass only "load_more"...

Verify email confirmation using Selenium

Note: If you are new to java and selenium then start with selenium java training videos .     Email confirmation seems to be integral part of any registration process. I came across an application which lets you provide your email address. You can follow the sign up link in you mail and then complete the registration process. Lets consider we provide GMail address for it. Now if were to use only Selenium then we would have to follow following steps - Launch GMail using Selenium; Some how search for new mail in the list of available mails; Some how click on it; Parse the mail message; Get the registration link; Follow up with registration process What do you think of an approach in which you can

Selenium Tutorial: Get attribute of an element

With Selenium 1.0 Let us consider Google Search Box for example and its "max length"is to be retrieved. Using xPath -         String var = selenium.getAttribute("//input[@name='q']/@maxlength");         System.out.println(var); Using css locator -                        String var = selenium.getAttribute("css=input[name='q']@maxlength");         System.out.println(var);        With Selenium 2.0 (WebDriver)        Using xPath -         String var = webDriver.findElement(By.xpath("//input[@name='q']")).getAttribute("maxlength")         System.out.println(var); Using css locator -                     ...