Using Watir to regression test some changes: I want to 'click' a row in a typical old style web page menu, where the menu is a table of tables. In this particular example, the table cell contains the menu item, and the row, which only consists of the one cell, has an onclick handler. I thought I could
cell = browser.element_by_xpath("//div[#id='Menu']/descendant::td[text()='New!'")
and use the cell to get the parent row, but I get the message
c:/ruby/lib/ruby/1.8/rexml/parsers/xpathparser.rb:330:in 'Predicate': undefined
method `[]' for nil:NilClass (NoMethodError)
which makes no sense to me.
We really need more detail before before an answer can be given
Generally speaking there are a few ways to deal with tables. You can use absolute indexes to the row and column numbers if that will always be the same, but a lot of times that's not the case.
If there's known (unique) text on the row somewhere, and the column of the cell is known, then you can often work via using a regular expression to identify the row with the known (and unique) text, and then identify the needed cell via it's 'column' within the row.
browser.row(:text, /my search text/).cell(:index, 2) # 2nd cell in the row that contains text matched by the regex
try this
cell = browser.div(:id,'Menu').cell(:text,'New!')
cell.click
and, maybe you lost closing ']' ?
cell = browser.element_by_xpath("//div[#id='Menu']/descendant::td[text()='New!']")
Related
I am trying to use Textjoin and IFS within a formula in Google Sheets to return a combination (all, none, or some) of values. I want to values to all be listed in the same cell at the end of a given row. In order for this to work, I am referencing a second tab within the same sheet.
I tried the following formula:
=ARRAYFORMULA(TEXTJOIN(" ",(IFS(Sheet2!F53="D",$F$5,Sheet2!R53="D",$R$5,Sheet2!T53="D",$T$5,""))))
What I want to happen is that if "D" is in the cell referenced on the 2nd sheet, it returns the specified text in the cell corresponding to $F$5, etc. If there are no cells with D in the referenced cell, then I just want it blank. When I used this formula, I get an error saying there is a wrong number of arguments for Textjoin.
I tried this formula:
=ARRAYFORMULA(TEXTJOIN(",", Sheet2!F23="D", $F$5, Sheet2!R23="D", $R$5, Sheet2!T23="D", $T$5, ""))
It simply listed each value in the cell corresponding to $F$5, etc and said true or false following the value. That is obviously not what I want either.
can you try:
=TEXTJOIN(" ",1,{IF(Sheet2!F53="D",$F$5,),IF(Sheet2!R53="D",$R$5,),IF(Sheet2!T53="D",$T$5,)})
I am having some issues with specifying a dynamic cell range for a "data validation".
I'm aware you can do some tricky stuff with = "Projections!M4:M"&O2. You can update the content of cell O2 for example to 3 and the output would be Projections!M4:M3.
This makes the value "dynamic". These tricks don't seem to work in the "Cell Range:" input field in the Data Validation selection/configuration screen.
My problem is, I hate seeing drop down arrows (call me o.c.d) for rows that have no content, my number of rows will grow in the future so I don't have any other option than selecting M4:Mfills the whole 1002 rows with drop down arrows.
Has anyone worked out a trick to make dropdown arrows only show up for rows that are filled?
I'm using = COUNTA(B4:B)to get the number of rows that are filled and = "Projections!M4:M"&O2 to make the desired Projections!M4:MX string but the "Cell Range" input field in the Data validation screen doesn't accept this as valid either.
Well I didn't find a direct solution, but something that I can work with to resolve my issue which was I hate seeing drop down arrows for empty rows.
I turned a filter on for a column that will always be filled in and filtered by conditions Cell is not empty but i'd prefer a better solution.
I'm trying to use the filter() formula within a spreadsheet, from another tab within that spreadsheet.
I've got a number of drop-down menus that, when used, bring up the relevant data from the table I'm filtering from.
I've managed to make it work when it's a table of data from row 2 downwards (row 1 being a header row), but now the table starts from the 6th row down with other information above it (most of it, however, is blank). As such, now all of the options come up automatically when the drop down menus are blank.
I either need the formula below to start from the 6th row down, or to ignore the blank cells. It must be an easy solution but for the life of me, I can't find it anywhere on the internet (I'm pretty new with spreadsheet formulas so please be gentle).
This is the formula I've been using that works when there are no blank rows:
=FILTER(Sheet2!A:T,(Sheet2!D:D=B12)+(Sheet2!F:F=C12)+(Sheet2!G:G=D12)+(Sheet2!H:H=E12)+(Sheet2!I:I=F12)+(Sheet2!N:N=G12)+(Sheet2!O:O=H12)+(Sheet2!T:T=I12))
If it helps, the drop-down options are both numbers and text, and I'm using Google Sheets rather than Excel.
You can probably just change your ranges to 'A6:T' instead of 'A:T'. 'A:A' range syntax gets all rows in that column. 'A6:A' will start it at 6 but not define an ending row, which I think is what you want.
This is your formula with those small changes:
=FILTER(Sheet2!A6:T,(Sheet2!D6:D=B12)+(Sheet2!F6:F=C12)+(Sheet2!G6:G=D12)+(Sheet2!H6:H=E12)+(Sheet2!I6:I=F12)+(Sheet2!N6:N=G12)+(Sheet2!O6:O=H12)+(Sheet2!T6:T=I12))
The =isBlank() formula may be useful to you as well. It takes a cell reference and returns true/false. You can wrap this in NOT() to give the opposite result, i.e =NOT(ISBLANK(A1)) will return true if there is a value.
I have a table with several columns. The first column contains unique data, the 5th contains three buttons (Edit, Assignments and Delete).
I would like to use an XPath expression to locate on the edit button for one of the rows by indentifying the row using the unique data from column one (think that made sense).
I have built some expressions which will allow me to locate on the first column and edit button independantly as follows:
//td[text()='Managers']
and
tr[2]//button[text()='Edit']
The closest I can get to doing what I want is:
//td[text()='Managers'] | //tr[2]//button[text()='Edit']
...However this will locate on the data/button in column 1 AND 5 at the same time, what I want is just for the button in column 5.
The reason I want to do it this way, is so later I can pass in 'Managers' as a varaible in order to select the row (as its unique and meaningful data), and then press the edit button in a different column on that row.
Hope this makes sense!
Thanks
The question isn't very clear as posted, especially because I can't see any relevant part of the HTML. But if I understand this correctly, you can try to select the row that has Manager in it then get corresponding Edit button like so :
//tr[.//td='Managers']//button[.='Edit']
I'm in great need of help. I've a form which asks basic questions and puts the results into rows of an existing spreadsheet.
Specific data from those responses are "promoted" to 2nd, 3rd and 4th tabs based on IF formulas on tabs 2+ checking the value of a pull down selection on in the corresponding row on each previous tab. (Waterfall)
My challenge is - forms data is inserted into a new row (Does not use existing) and if I set the pulldown value to "Approved" on the first tab, the formulas on the second tab which were contiguous now skip the row where the form data was automatically entered.
I suspect I need to learn how to properly use ArrayFormula, etc, but have not managed to fix this looking at existing examples combined with my IF statements.
Help is appreciated. Sample is here. Safe to ignore the first and last tabs.
Thank you.
You can try using an open-ended range with ArrayFormula. For example, the formula on "2-Pipeline" in cell D3 could be:
=arrayformula(IF('1-IdeasReceived'!U2:U="Approved",'1-IdeasReceived'!L2:L, ))
The ranges U2:U and L2:L should pick up all rows in those columns, even after you've had forms submitted.
Since this is an ArrayFormula over column ranges, you only need it in cell D3; it will inject CONTINUE formulas down the rest of the column.
Warning: Your spreadsheet is combining dynamic row content (e.g. pulled from another sheet) with static content (e.g. "Environment, Health & Safety" column on "2-Pipeline" sheet). This is bound to result in misalignment if rows are added or deleted in the middle of the source data.